home *** CD-ROM | disk | FTP | other *** search
- unit fMainForm;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, Buttons, ExtCtrls, ComCtrls,
- FileCtrl, uSelectDir, uBuildingOBject, ActnList, Menus;
-
- //DONE: When editing something, be sure enabled and disabled buttons are right
- // save button disabled until a change is made, save settings enabled only after save button used
- //DONE -cuser option: user option auto increment,
- //DONE -cuser option: version info in project results and dump.dat,
- //DONE -cuser option: minimize on build,
- //DONE -cMain form: Add Main Menu
- //DONE -cMain form: refresh version info window on main form after build (each file)
- //DONE -cMain form: locate errors in results -- replaced by having a summary option
- //DONE -cBuilder object: publish user options
- //DONE -cMain form: create user options form
- //DONE 1 -cBuilder object: Do not allow writing to .ver or .rc or .res files to halt everything.
- // fixed for .res, but still display or record error
- //todo -cBuilder object: user option to replace r/o files for .ver, .rc and .res?
- //DONE -cMain form: Wrap long names in progress caption
- //DONE -cMain form: wrap names in edit version window
- //DONE -cMain form: summary report of all compiles with file version, appid, descriptions, etc on one line
-
- //DONE -cBuilder object: Make sure same .ver file regardless of looking at .rc,.or .dpr
-
- //DONE -cBuilder object: make sure .rc and .ver and .res go in source dir, (is .res going to target dir?)
-
- //Done -cBuilder object: AppId not showing up in lower right corner synposis of verison info.
-
-
- type
- TeditingState = (esRightSide, esLeftSide, esBuilding, esNoProject, esBuildResults);
-
- TF_MainForm = class(TForm)
- Panel1: TPanel;
- StatusBar1: TStatusBar;
- Panel2: TPanel;
- Panel3: TPanel;
- Panel4: TPanel;
- Splitter1: TSplitter;
- Panel9: TPanel;
- Label6: TLabel;
- cb_ProjectList: TComboBox;
- bb_newProject: TBitBtn;
- bb_save: TBitBtn;
- Label1: TLabel;
- Panel8: TPanel;
- Label5: TLabel;
- Panel10: TPanel;
- b_editVersion: TBitBtn;
- m_projectVersion: TMemo;
- Splitter2: TSplitter;
- Splitter3: TSplitter;
- Panel6: TPanel;
- Panel7: TPanel;
- Label3: TLabel;
- Panel11: TPanel;
- Label4: TLabel;
- Splitter5: TSplitter;
- Panel13: TPanel;
- b_editconfig: TBitBtn;
- Panel14: TPanel;
- BitBtn3: TBitBtn;
- M_ConfigFile: TMemo;
- ActionList1: TActionList;
- A_editVersion: TAction;
- L_Results: TLabel;
- b_Build: TBitBtn;
- b_exit: TBitBtn;
- b_halt: TBitBtn;
- Memo1: TMemo;
- Panel15: TPanel;
- b_editResourceMask: TButton;
- b_save: TButton;
- A_editFileList: TAction;
- A_saveFileList: TAction;
- A_EditConfig: TAction;
- A_SaveConfig: TAction;
- A_EditPath: TAction;
- A_savePath: TAction;
- A_addToPath: TAction;
- A_DisplayDCCOptions: TAction;
- A_NewProject: TAction;
- A_saveProjectSettings: TAction;
- A_DoBuild: TAction;
- A_exit: TAction;
- A_stopBuild: TAction;
- A_EditRCMask: TAction;
- A_SaveRCMask: TAction;
- b_libPathUp: TBitBtn;
- b_libPathDown: TBitBtn;
- BitBtn4: TBitBtn;
- LB_LibraryPath: TListBox;
- b_addDir: TBitBtn;
- b_DeleteDir: TBitBtn;
- A_deletePath: TAction;
- A_AddFile: TAction;
- OpenDialog: TOpenDialog;
- A_deleteFile: TAction;
- A_projectOptions: TAction;
- b_cancelEditwindow: TButton;
- A_cancelEditWindow: TAction;
- Panel5: TPanel;
- Label2: TLabel;
- Panel12: TPanel;
- b_editFiles: TBitBtn;
- b_fileDown: TBitBtn;
- b_FileUp: TBitBtn;
- b_addFile: TBitBtn;
- b_deleteFile: TBitBtn;
- LB_Files: TListBox;
- Splitter4: TSplitter;
- b_ideLibPath: TButton;
- MainMenu1: TMainMenu;
- miProject: TMenuItem;
- miNew: TMenuItem;
- miSaveProject: TMenuItem;
- N1: TMenuItem;
- miExit: TMenuItem;
- miFiles: TMenuItem;
- miAdd: TMenuItem;
- miDelete: TMenuItem;
- miEditFileList: TMenuItem;
- miCompiler: TMenuItem;
- miConfig: TMenuItem;
- miDCC: TMenuItem;
- miLibraryPath: TMenuItem;
- miAddPath: TMenuItem;
- miDeletepath: TMenuItem;
- EditPath1: TMenuItem;
- miResources: TMenuItem;
- EditVersion1: TMenuItem;
- EditRCMask1: TMenuItem;
- miHelp: TMenuItem;
- miContents: TMenuItem;
- miAbout: TMenuItem;
- miBuild: TMenuItem;
- N2: TMenuItem;
- miProjectOptions: TMenuItem;
- LB_fileVersion: TListBox;
- A_summary: TAction;
- Button1: TButton;
- A_OpenProject: TAction;
- OpenProject1: TMenuItem;
- A_retrieveLastDump: TAction;
- Retrievelastdump1: TMenuItem;
- b_DPKOptions: TBitBtn;
- procedure bb_saveClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure A_editVersionExecute(Sender: TObject);
- procedure LB_FilesClick(Sender: TObject);
- procedure cb_ProjectListChange(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure b_exitClick(Sender: TObject);
- procedure A_editFileListExecute(Sender: TObject);
- procedure A_saveFileListExecute(Sender: TObject);
- procedure A_EditConfigExecute(Sender: TObject);
- procedure A_SaveConfigExecute(Sender: TObject);
- procedure A_DisplayDCCOptionsExecute(Sender: TObject);
- procedure b_FileUpClick(Sender: TObject);
- procedure A_saveProjectSettingsExecute(Sender: TObject);
- procedure b_fileDownClick(Sender: TObject);
- procedure b_libPathUpClick(Sender: TObject);
- procedure b_libPathDownClick(Sender: TObject);
- procedure A_addToPathExecute(Sender: TObject);
- procedure A_deletePathExecute(Sender: TObject);
- procedure A_AddFileExecute(Sender: TObject);
- procedure A_DoBuildExecute(Sender: TObject);
- procedure b_haltClick(Sender: TObject);
- procedure A_deleteFileExecute(Sender: TObject);
- procedure A_savePathExecute(Sender: TObject);
- procedure A_EditRCMaskExecute(Sender: TObject);
- procedure A_EditPathExecute(Sender: TObject);
- procedure A_SaveRCMaskExecute(Sender: TObject);
- procedure A_cancelEditWindowExecute(Sender: TObject);
- procedure Memo1Change(Sender: TObject);
- procedure A_NewProjectExecute(Sender: TObject);
- procedure b_ideLibPathClick(Sender: TObject);
- procedure A_projectOptionsExecute(Sender: TObject);
- procedure LB_FilesDrawItem(Control: TWinControl; Index: Integer;
- Rect: TRect; State: TOwnerDrawState);
- procedure A_summaryExecute(Sender: TObject);
- procedure A_retrieveLastDumpExecute(Sender: TObject);
- procedure miContentsClick(Sender: TObject);
- procedure miAboutClick(Sender: TObject);
- private
- fBuilderProjectList : tstringlist;
- fProjectDir : string;
- fProjectName : string;
- fFileName : string;
- fTargetFile : string;
- fProjectChanged : boolean;
- fEditState: TeditingState;
- procedure SaveSettings;
- procedure SelectFile(value: integer);
- // builder object event handlers
- procedure HandleCompileEnd(const aSourceFile, aDestFile,
- aErrMsg: string; aSuccess: boolean; alines, ahints, awarnings,
- aerrors, afatal: integer);
- procedure HandleCompileNotify(const aSourcefile, Info: string);
- procedure HandleCompileStart(const aSourceFile, aDestFile,
- aErrMsg: string);
- Procedure OnProjectStart(const aSourcefile, Info : string);
- procedure HandleProjectDone(const aProjectName: string; aOK, aErr,
- alines, ahints, awarnings, aerrors, afatal: integer);
- procedure HandleProjectHalt(const aSourcefile, Info : string);
- //procedure clearResults;
- procedure SetSettingsChanged(const Value: boolean);
- Procedure DisableSettings;
- procedure EnableSettings;
- //procedure PrepResults;
- procedure redrawcaptions;
- procedure SetEditState(const Value: TeditingState);
- public
- BuilderObject : TBuilderClass;
- function MakeEllipsisFilename(const fn: string; aWidth: integer;
- aCanvas: tcanvas): string;
- Property SettingsChanged : boolean read fProjectChanged write SetSettingsChanged;
- Property EditState : TeditingState read fEditState write SetEditState;
- end;
-
- var
- F_MainForm: TF_MainForm;
-
- implementation
- uses inifiles, feditversion, DOSToMemo, uRCBuilder, IDELibPath, fOptions, fDCCoptions, fabout;
- const cProject = 'Projects';
-
- {$R *.DFM}
-
- procedure TF_MainForm.bb_saveClick(Sender: TObject);
- begin
- BuilderOBject.InitializeProject(fProjectDir);
- if not BuilderObject.SaveProjectSettings
- then begin
- showmessage('Failed to save project settings');
- SettingsChanged := true;
- end
- else SettingsChanged := false;
- end;
-
- procedure TF_MainForm.FormCreate(Sender: TObject);
- var i : integer;
- begin
- If BuilderObject = nil
- then BuilderObject := TBuilderClass.create(self);
- BuilderObject.OnProjectHalt := HandleProjectHalt;
- BuilderObject.OnCompileEvent := HandleCompileNotify;
- BuilderObject.OnCompileStart := HandleCompileStart;
- BuilderObject.OnCompileEnd := HandleCompileEnd;
- BuilderObject.OnProjectDone := HandleProjectDone;
- fBuilderProjectList := tstringlist.create;
- with tinifile.create(ChangeFileExt(application.exename, '.ini')) do begin
- readSectionvalues(cProject, fBuilderProjectList);
- free;
- end;
- if fBuilderProjectList.count > 0
- then begin
- for i := 0 to fBuilderProjectList.count-1 do
- cb_ProjectList.items.add(fBuilderProjectList.names[i]);
- cb_ProjectList.itemindex := 0;
- cb_ProjectListChange(sender);
- LB_files.itemindex := 0;
- LB_FilesClick(sender);
- EditState := esNoProject;
- end
- else cb_projectList.text := '';
- EditState := esLeftSide;
- SettingsChanged := false;
- end;
-
-
- procedure TF_MainForm.A_editVersionExecute(Sender: TObject);
- begin
- with Tf_editversion.EditSavings(BuilderObject, fProjectName, fFileName) do begin
- if showmodal = mrOK
- then begin
- BuilderObject.ResourceHandler.ClearSettings;
- BuilderObject.ResourceHandler.GetSettings(SlashSep(fProjectDir, cProjectList), rsProject);
- m_projectVersion.lines.text := BuilderObject.ResourceHandler.DisplayRCData(' from Files.ini');
- BuilderObject.ResourceHandler.ClearSettings;
- BuilderObject.ResourceHandler.GetSettings(ChangeFileExt(fFileName, '.VER'), rsFile);
- LB_fileVersion.items.text := BuilderObject.ResourceHandler.DisplayRCData('from '+
- MakeEllipsisFilename(ChangeFileExt(fFileName, '.VER'),
- LB_fileVersion.Width - lb_fileVersion.canvas.textwidth('from '),
- LB_fileVersion.Canvas) );
-
- end;
- free;
- end;
- end;
-
- procedure TF_MainForm.SelectFile(value : integer);
- begin
- if LB_files.items.count = 0 then exit;
- with LB_files do begin
- if (value < 0) or (value > items.count-1)
- then begin
- value := 0;
- itemindex := value;
- end;
- fFileName := copy(Items[value], pos('=',items[value])+1, 200);
- fTargetFile := copy(Items[value], 1, pos('=',items[value])-1);
- end;
- if (pos('.RC', uppercase(fFileName)) > 0)
- and
- BuilderObject.IsIndependentRCFile(fFileName)
- then LB_FileVersion.items.text := 'Independent resource file'
- else begin
- BuilderObject.ResourceHandler.ClearSettings;
- BuilderObject.ResourceHandler.GetSettings(ChangeFileExt(fFileName, '.VER'), rsFile);
- LB_fileVersion.items.text := BuilderObject.ResourceHandler.DisplayRCData('from '+
- MakeEllipsisFilename(ChangeFileExt(fFileName, '.VER'),
- LB_fileVersion.Width - lb_fileVersion.canvas.textwidth('from '),
- LB_fileVersion.Canvas) );
- end;
- end;
-
- procedure TF_MainForm.LB_FilesClick(Sender: TObject);
- begin
- SelectFile(LB_files.itemindex);
- end;
-
- procedure TF_MainForm.cb_ProjectListChange(Sender: TObject);
- begin
- lb_files.items.clear;
- m_configFile.clear;
- LB_LibraryPath.items.clear;
- m_projectVersion.clear;
- LB_fileVersion.items.clear;
- fProjectName := cb_projectList.Text;
- fProjectDir := fBuilderProjectList.values[fProjectName];
- BuilderObject.InitializeProject(fProjectDir);
- lb_files.items.assign(BuilderObject.ProjectList);
- m_configFile.Lines.assign(BuilderObject.ConfigFile);
- LB_LibraryPath.items.assign(BuilderOBject.LibraryFile);
- BuilderObject.ResourceHandler.ClearSettings;
- BuilderObject.ResourceHandler.GetSettings(SlashSep(fProjectDir, cProjectList), rsProject);
- m_projectVersion.lines.text := BuilderObject.ResourceHandler.DisplayRCData('from Files.ini');
- end;
-
- procedure TF_MainForm.FormDestroy(Sender: TObject);
- begin
- fBuilderProjectList.free;
- end;
-
- procedure TF_MainForm.redrawcaptions;
- begin
- l_results.invalidate;
- StatusBar1.invalidate;
- application.processmessages;
- end;
-
- procedure TF_MainForm.HandleCompileEnd(const aSourceFile, aDestFile,
- aErrMsg: string; aSuccess: boolean; alines, ahints, awarnings, aerrors,
- afatal: integer);
- begin
- // it turns out this goes by too fast to be seen...
- l_results.caption := 'Done with compiling '+#13#10+MakeEllipsisFilename(asourcefile, l_results.Width, l_results.Canvas)+#13#10+
- ' to '+MakeEllipsisFilename(aDestFile, l_results.Width, l_results.Canvas)+ #13#10+
- aErrMsg;
- StatusBar1.simpleText := aErrMsg+' Lines: '+IntToStr(alines)+ ', Hints: '+IntToStr(aHints)+ ', Warnings: '+IntToStr(aWarnings)+', Errors: '+IntToStr(aErrors)+', Fatal: '+IntToStr(aFatal);
- redrawcaptions;
- end;
-
- procedure TF_MainForm.HandleCompileNotify(const aSourcefile, Info: string);
- begin
- l_results.caption := MakeEllipsisFilename(asourcefile, l_results.Width, l_results.Canvas) + #13#10+Info;
- //memo1.lines.add(asourcefile + ': '+Info);
- StatusBar1.simpleText := asourcefile + ': '+Info;
- redrawcaptions;
- end;
-
- procedure TF_MainForm.OnProjectStart(const aSourcefile, Info: string);
- begin
- l_results.caption := 'Starting build '+MakeEllipsisFilename(fProjectDir, l_results.Width, l_results.Canvas) + #13#10 + Info;
- redrawcaptions;
- EditState := esBuilding;
- end;
-
- procedure TF_MainForm.HandleCompileStart(const aSourceFile, aDestFile,
- aErrMsg: string);
- begin
- l_results.caption := 'Start compiling '+#13#10+MakeEllipsisFilename(asourcefile, l_results.Width, l_results.Canvas)+#13#10+
- ' to '+MakeEllipsisFilename(aDestFile, l_results.Width, l_results.Canvas)+ #13#10+
- aErrMsg;
- lb_files.Itemindex := lb_files.items.IndexOfName(aDestFile);
- redrawcaptions;
- end;
-
- procedure TF_MainForm.HandleProjectDone(const aProjectName: string; aOK,
- aErr, alines, ahints, awarnings, aerrors, afatal: integer);
- begin
- enableSettings;
- L_results.caption := 'Project '+fprojectName +' is done.'+#13#10+ 'Final result is '+IntToStr(aOK)+' OK, '+IntToStr(aErr)+' ERR.';
- StatusBar1.simpleText := 'Final result is '+IntToStr(aOK)+' OK, '+IntToStr(aErr)+' ERR. Lines: '+IntToStr(alines)+ ', Hints: '+IntToStr(aHints)+ ', Warnings: '+IntToStr(aWarnings)+', Errors: '+IntToStr(aErrors)+', Fatal: '+IntToStr(aFatal);
- Memo1.lines.add(#13#10+'Project Summary: '+#13#10);
- memo1.lines.addstrings(BuilderObject.ProjectSummary);
- Memo1.lines.add(#13#10+'Detailed output: '+#13#10);
- memo1.lines.addstrings(BuilderObject.ProjectResults);
- redrawcaptions;
- b_save.Action := A_Summary;
- end;
-
- procedure TF_MainForm.HandleProjectHalt(const aSourcefile, Info: string);
- begin
- L_results.caption := 'Builder Halted: '+#13#10+aSourceFile+#13#10+Info;
- memo1.lines.add(L_results.caption);
- Memo1.lines.add(#13#10+'Project Summary: '+#13#10);
- memo1.lines.addstrings(BuilderObject.ProjectSummary);
- Memo1.lines.add(#13#10+'Detailed output: '+#13#10);
- memo1.lines.addstrings(BuilderObject.ProjectResults);
- b_save.Action := A_Summary;
- if BuilderObject.HaltOnError
- then if MessageDlg('Error: '+Info+#13#10+'Do you want to halt the build?', mtconfirmation, [mbyes, mbNo],0) = mrYes
- then begin
- BuilderObject.HaltNow := true;
- memo1.lines.add('User halted build ');
- enableSettings;
- end
- else BuilderObject.haltNow := false;
- end;
-
- procedure TF_MainForm.b_exitClick(Sender: TObject);
- begin
- If SettingsChanged
- then SaveSettings;
- close;
- end;
-
-
-
- procedure TF_MainForm.A_editFileListExecute(Sender: TObject);
- begin
- L_Results.caption := 'Editing Files List for '+fProjectName;
- EditState := esRightSide;
- memo1.lines.assign(lb_files.items);
- Memo1.onChange := Memo1Change;
- b_save.action := A_SaveFileList; //OnClick := SaveFiles(sender);
- end;
-
- procedure TF_MainForm.A_saveFileListExecute(Sender: TObject);
- begin
- BuilderObject.ProjectList.Assign(memo1.lines);
- lb_files.items.assign(memo1.lines);
- EditState := esLeftSide;
- end;
-
- procedure TF_MainForm.A_EditConfigExecute(Sender: TObject);
- begin
- CreateDOSProcessRedirected('DCC32.exe /?', ChangeFileExt(application.exename, '.ini'), SlashSep(ExtractFilePath(application.exename), 'options.txt'), 'getting /? ');
- f_dccoptions := Tf_dccoptions.create(application);
- f_dccoptions.Memo1.lines.LoadFromFile(slashSep(ExtractFilePath(application.exename),'options.txt'));
- f_dccoptions.show;
- L_results.caption := 'Editing Configuration File for '+fProjectName;
- EditState := esRightSide;
- memo1.lines.assign(m_configfile.lines);
- Memo1.onChange := Memo1Change;
- b_save.action := A_SaveConfig;
- end;
-
- procedure TF_MainForm.A_SaveConfigExecute(Sender: TObject);
- begin
- BuilderObject.ConfigFile.assign(memo1.lines);
- memo1.lines.savetofile(slashSep(fprojectdir, cConfig));
- m_configFile.lines.assign(memo1.lines);
- EditState := esLeftSide;
- f_dccoptions.free;
- f_dccoptions := nil;
- end;
-
- procedure TF_MainForm.A_DisplayDCCOptionsExecute(Sender: TObject);
- begin
- EditState := esRightSide;
- CreateDOSProcessRedirected('DCC32.exe /?', ChangeFileExt(application.exename, '.ini'), SlashSep(ExtractFilePath(application.exename), 'options.txt'), 'getting /? ');
- L_results.caption := 'DCC32 /Help output'+#13#10+'Stored in '+#13#10+SlashSep(ExtractFilePath(application.exename), 'options.txt');;
- memo1.Lines.LoadFromFile(SlashSep(ExtractFilePath(application.exename), 'options.txt'));
- end;
-
- procedure TF_MainForm.b_FileUpClick(Sender: TObject);
- var i : integer;
- begin
- i := lb_files.itemindex;
- if (i = -1) or (i = 0) then exit;
- lb_files.Items.Move(lb_files.itemindex, lb_files.itemindex-1);
- lb_files.itemindex := i-1;
- BuilderObject.ProjectList.assign(lb_files.items);
- SettingsChanged := true;
- SelectFile(LB_files.itemindex);
- end;
-
- procedure TF_MainForm.b_fileDownClick(Sender: TObject);
- var i : integer;
- begin
- i := LB_Files.itemindex;
- if (i = -1) or (i = LB_Files.items.count-1) then exit;
- LB_Files.Items.Move(LB_Files.itemindex, LB_Files.itemindex+1);
- LB_Files.itemindex := i+1;
- BuilderObject.ProjectList.assign(lb_files.items);
- SettingsChanged := true;
- SelectFile(LB_files.itemindex);
- end;
-
- procedure TF_MainForm.SetSettingsChanged(const Value: boolean);
- begin
- fProjectChanged := Value;
- A_SaveProjectSettings.enabled := value;
- end;
-
- procedure TF_MainForm.A_saveProjectSettingsExecute(Sender: TObject);
- begin
- if not BuilderObject.SaveProjectSettings
- then begin
- showmessage('Failed to save project settings');
- SettingsChanged := true;
- end
- else SettingsChanged := false;
- end;
-
- procedure TF_MainForm.SaveSettings;
- begin
- If MessageDlg('Project '+fProjectdir+' has changed. Do you wish to save the changes?', mtConfirmation, [mbYEs, mbNo],0) = mrYes
- then A_saveProjectSettings.execute;
- b_Build.default := true;
- end;
-
-
- procedure TF_MainForm.b_libPathUpClick(Sender: TObject);
- var i : integer;
- begin
- i := LB_LibraryPath.itemindex;
- if (i = -1) or (i = 0) then exit;
- LB_LibraryPath.Items.Move(LB_LibraryPath.itemindex, LB_LibraryPath.itemindex-1);
- LB_LibraryPath.itemindex := i-1;
- BuilderObject.LibraryFile.Assign(LB_LibraryPath.items);
- SettingsChanged := true;
- end;
-
-
-
- procedure TF_MainForm.b_libPathDownClick(Sender: TObject);
- var i : integer;
- begin
- i := LB_LibraryPath.itemindex;
- if (i = -1) or (i = LB_LibraryPath.items.count-1) then exit;
- LB_LibraryPath.Items.Move(LB_LibraryPath.itemindex, LB_LibraryPath.itemindex+1);
- LB_LibraryPath.itemindex := i+1;
- BuilderObject.LibraryFile.Assign(LB_LibraryPath.items);
- SettingsChanged := true;
- end;
-
- procedure TF_MainForm.A_addToPathExecute(Sender: TObject);
- var dir : string;
- begin
- GetDir(0,dir);
- if MySelectDirectory('Select Path to Add', dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
- then begin
- LB_LibraryPath.items.add(dir);
- BuilderObject.LibraryFile.Assign(LB_LibraryPath.items);
- SettingsChanged := true;
- end;
- end;
-
- procedure TF_MainForm.A_deletePathExecute(Sender: TObject);
- var i : integer;
- begin
- i := LB_LibraryPath.itemindex;
- LB_LibraryPath.items.delete(LB_LibraryPath.itemindex);
- if i < LB_LibraryPath.items.count
- then LB_LibraryPath.itemindex := i;
- BuilderObject.LibraryFile.Assign(LB_LibraryPath.items);
- SettingsChanged := true;
- end;
-
- procedure TF_MainForm.A_AddFileExecute(Sender: TObject);
- var i,x : integer;
- dir, fname : string;
- CurrentTargetDir : string;
- begin
- if lb_files.itemindex = -1
- then lb_files.itemindex := lb_files.items.count-1;
- x := lb_files.itemindex;
- if x = -1
- then currentTargetDir := extractFilePath(application.exename)
- else CurrentTargetDir := extractFilePath(Lb_files.items.Names[lb_files.Itemindex]);
- with opendialog do begin
- filter := 'Project files (dpr, res)|*.dpr;*.res;*.rc';
- options := [ofHideReadOnly,ofAllowMultiSelect,ofPathMustExist,ofFileMustExist,ofEnableSizing];
- Title := 'select file(s) (dpr or res or rc) to be in project';
- if execute
- then begin
- for i := 0 to files.count-1 do begin
- // change .res to .rc, even though it doesn't exist yet
- if pos('.RES', uppercase(files[i])) > 0
- then files[i] := changeFileExt(files[i], '.RC');
- fname := extractfilename(files[i]);
- dir := CurrentTargetDir;
- if not MySelectDirectory('Select Target Directory', dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
- then dir := extractFilePath(files[i]);
- CurrentTArgetDir := dir;
- if pos('.EXE', uppercase(fname)) > 0
- then fname := changeFileExt(fname, '.exe')
- else if pos('.dpk', fname) > 0
- then fname := changeFileExt(fname, '.bpl')
- else if pos('.RC', uppercase(fname)) > 0
- then fname := changeFileExt(fname, '.res');
- if x = lb_files.items.count-1
- then lb_files.items.add(dir+'\'+fname+'='+files[i])
- else lb_files.items.insert(x, dir+'\'+fname+'='+files[i]);
- end;
- BuilderObject.ProjectList.assign(lb_files.items);
- SettingsChanged := true;
- end;
- end;
- end;
-
- procedure TF_MainForm.A_DoBuildExecute(Sender: TObject);
- begin
- If SettingsChanged
- then saveSettings;
- if BuilderObject.MinimizeOnBuild
- then application.Minimize;
- BuilderObject.HaltNow := false;
- EditState := esBuilding;
- A_summary.caption := 'Summary';
- BuilderObject.execute;
- if BuilderObject.MinimizeOnBuild
- then application.Restore;
- b_exit.default := true;
- BuilderObject.ResourceHandler.ClearSettings;
- BuilderObject.ResourceHandler.GetSettings(SlashSep(fProjectDir, cProjectList), rsProject);
- m_projectVersion.lines.text := BuilderObject.ResourceHandler.DisplayRCData('From files.ini');
- SelectFile(LB_files.itemindex);
- end;
-
- procedure TF_MainForm.DisableSettings;
- begin
- A_NewProject.enabled := true;
- A_editVersion.enabled := false;
- A_editConfig.enabled := false;
- A_editPath.enabled := false;
- A_addToPath.enabled := false;
- A_DisplayDCCoptions.enabled := false;
- A_newProject.enabled := false;
- A_editRCMask.enabled := false;
- A_DeletePath.enabled := false;
- A_addFile.enabled := false;
- a_deletePath.enabled := false;
- A_editFileList.enabled := false;
- A_deleteFile.enabled := false;
- b_fileup.enabled := false;
- b_fileDown.enabled := false;
- b_libPathUp.enabled := false;
- b_libPathDown.enabled := false;
- end;
-
- procedure TF_MainForm.EnableSettings;
- begin
- A_NewProject.enabled := true;
- A_editVersion.enabled := true;
- A_editConfig.enabled := true;
- A_editPath.enabled := true;
- A_addToPath.enabled := true;
- A_DisplayDCCoptions.enabled := true;
- A_newProject.enabled := true;
- A_editRCMask.enabled := true;
- A_DeletePath.enabled := true;
- A_addFile.enabled := true;
- a_deletePath.enabled := true;
- A_editFileList.enabled := true;
- A_deleteFile.enabled := true;
- b_fileup.enabled := true;
- b_fileDown.enabled := true;
- b_libPathUp.enabled := true;
- b_libPathDown.enabled := true;
- a_DoBuild.enabled := true;
- end;
-
-
- procedure TF_MainForm.b_haltClick(Sender: TObject);
- begin
- BuilderObject.HaltNow := true;
- end;
-
- procedure TF_MainForm.A_deleteFileExecute(Sender: TObject);
- var i : integer;
- begin
- i := LB_Files.itemindex;
- LB_Files.items.delete(LB_Files.itemindex);
- if i < LB_Files.items.count
- then LB_Files.itemindex := i;
- BuilderObject.ProjectList.assign(lb_files.items);
- SettingsChanged := true;
- end;
-
- procedure TF_MainForm.A_EditPathExecute(Sender: TObject);
- begin
- L_Results.caption := 'Editing Library Path for '+fProjectName;
- EditState := esRightSide;
- b_ideLibPath.visible := true;
- memo1.lines.assign(LB_LibraryPath.items);
- Memo1.onChange := Memo1Change;
- b_save.action := A_SavePath; //OnClick := SaveFiles(sender);
- end;
-
- procedure TF_MainForm.A_savePathExecute(Sender: TObject);
- begin
- BuilderObject.LibraryFile.Assign(memo1.lines);
- LB_LibraryPath.items.assign(memo1.lines);
- EditState := esLeftSide;
- end;
-
- procedure TF_MainForm.A_EditRCMaskExecute(Sender: TObject);
- begin
- L_Results.caption := 'Editing RC Mask for '+fProjectName;
- EditState := esRightSide;
- memo1.lines.loadFromFile(SlashSep(fprojectdir, cResourceMask));
- Memo1.onChange := Memo1Change;
- b_save.action := A_SaveRCMask;
- end;
-
- procedure TF_MainForm.A_SaveRCMaskExecute(Sender: TObject);
- begin
- memo1.lines.SaveToFile(SlashSep(fprojectdir, cResourceMask));
- EditState := esLeftSide;
- end;
-
- procedure TF_MainForm.SetEditState(const Value: TeditingState);
- procedure ClearResults;
- begin
- Memo1.clear;
- memo1.Color := clInactiveCaptionText;
- end;
-
- begin
- fEditState := Value;
- case value of
- esRightSide : begin
- b_save.visible := true;
- A_cancelEditWindow.visible := true;
- A_cancelEditWindow.Enabled := true;
- memo1.clear;
- memo1.color := clWindow;
- disableSettings;
- Memo1.setfocus;
- end;
- esLeftSide : begin
- b_save.visible := false;
- A_cancelEditWindow.visible := false;
- b_ideLibPath.visible := false;
- clearResults;
- enableSettings;
- memo1.onChange := nil;
- end;
- esBuilding : begin
- b_halt.enabled := true;
- A_DoBuild.Enabled := false;
- ClearResults;
- DisableSettings;
- memo1.onChange := nil;
- end;
- esNoProject : begin
- //ClearResults;
- EnableSettings;
- memo1.onChange := nil;
- end;
- esBuildResults : ;
- end;
- end;
-
- procedure TF_MainForm.A_cancelEditWindowExecute(Sender: TObject);
- begin
- EditState := esLeftSide;
- if f_dccoptions <> nil
- then begin
- f_dccoptions.free;
- f_dccoptions := nil;
- end;
- end;
-
- procedure TF_MainForm.Memo1Change(Sender: TObject);
- begin
- SettingsChanged := true;
- end;
-
- procedure TF_MainForm.A_NewProjectExecute(Sender: TObject);
- var dir : string;
- i : integer;
- begin
- if MySelectDirectory('Select Project specs directory', dir, [sdAllowCreate, sdPerformCreate, sdPrompt],0)
- then begin
- if fProjectChanged
- then SaveSettings;
- fProjectDir := dir;
- for i := length(dir) downto 1 do
- if dir[i] = '\'
- then begin
- fProjectName := copy(dir, i+1, 200);
- break;
- end;
- cb_projectList.items.add(fprojectNAme);
- cb_projectList.text := fProjectNAme;
- fBuilderProjectList.add(fProjectName+'='+fProjectDir);
- with tinifile.create(ChangeFileExt(application.exename, '.ini')) do begin
- writeString(cProject, fProjectName, fProjectDir);
- free;
- end;
- end;
- end;
-
- procedure TF_MainForm.b_ideLibPathClick(Sender: TObject);
- var tmpsl : tstringlist;
- begin
- tmpsl := GetIDELibraryPath;
- if tmpsl <> nil
- then begin
- Memo1.lines.assign(tmpsl);
- tmpsl.free;
- SettingsChanged := true;
- end;
-
- end;
-
- procedure TF_MainForm.A_projectOptionsExecute(Sender: TObject);
- begin
- with Tf_options.create(nil) do begin
- cb_autoincrement.checked := BuilderObject.AutoIncrement;
- cb_AutoComment.checked := BuilderObject.IncrementComment;
- cb_minimize.checked := BuilderObject.MinimizeOnBuild;
- cb_CheckVersion.checked := BuilderObject.CheckVersion;
- cb_VerInfoInVerFile.checked := BuilderObject.ActualVerInfoInVerFile;
- cb_HaltOnError.checked := BuilderObject.HaltOnError;
- if ShowModal = mrOK
- then begin
- If (BuilderObject.AutoIncrement <> cb_autoincrement.checked)
- or
- (BuilderObject.IncrementComment <> cb_AutoComment.checked)
- or
- (BuilderObject.MinimizeOnBuild <> cb_minimize.checked)
- or
- (BuilderObject.CheckVersion <> cb_CheckVersion.checked)
- or
- (BuilderObject.ActualVerInfoInVerFile <> cb_VerInfoInVerFile.checked)
- or
- (BuilderObject.HaltOnError <> cb_HaltOnError.checked)
- then SettingsChanged := true;
- BuilderObject.AutoIncrement := cb_autoincrement.checked;
- BuilderObject.IncrementComment := cb_AutoComment.checked;
- BuilderObject.MinimizeOnBuild := cb_minimize.checked;
- BuilderObject.CheckVersion := cb_CheckVersion.checked;
- BuilderObject.ActualVerInfoInVerFile := cb_VerInfoInVerFile.checked;
- BuilderObject.HaltOnError := cb_HaltOnError.checked;
- end;
- free;
- end;
- end;
-
- function TF_MainForm.MakeEllipsisFilename(const fn : string; aWidth : integer; aCanvas : tcanvas): string;
- var fronthalf, backHalf : string;
- i : integer;
- begin
- result := fn;
- if aCanvas.TextWidth(result) <= aWidth
- then exit;
- i := pos('\', result);
- fronthalf := copy(result, 1, i);
- backhalf := copy(result, i+1, 256);
- repeat
- i := pos('\', backhalf);
- if i = 0
- then break;
- system.delete(backhalf, 1, i);
- result := fronthalf+'...\'+backhalf;
- until aCanvas.TextWidth(result) <= aWidth;
- end;
-
- procedure TF_MainForm.LB_FilesDrawItem(Control: TWinControl;
- Index: Integer; Rect: TRect; State: TOwnerDrawState);
- var tmp, dest, src : string;
- begin
- tmp := LB_Files.items[index];
- dest := copy(tmp, 1, pos('=', tmp)-1);
- src := copy(tmp, pos('=', tmp)+1, 250);
- tmp := MakeEllipsisFilename(dest, (lb_files.width-20) div 2, lb_files.Canvas)+ '=' +
- MakeEllipsisFilename(src, (lb_files.width-20) div 2, lb_files.Canvas);
- with (Control as tListBox).canvas do begin
- fillRect(rect);
- TextOut(Rect.Left+1, Rect.Top, tmp);
- //TextRect(rect, 1,1,tmp);
- end;
- end;
-
- procedure TF_MainForm.A_summaryExecute(Sender: TObject);
- var i : integer;
- tmpsl : tstringlist;
- dump : tstringlist;
- begin
- if A_Summary.caption = 'Summary'
- then begin
- dump := tstringlist.create;
- dump.loadfromfile(builderobject.ProjectDir+'\dump.dat');
- tmpsl := tstringlist.create;
- for i := 0 to dump.count-1 do begin
- if
- (pos('Build ', dump[i]) = 1)
- or
- (pos('OK:', dump[i]) = 1)
- or
- (pos('ERR:', dump[i]) = 1)
- or
- (pos('VerInfo: ', dump[i]) = 1)
- then tmpsl.add(dump[i]);
- if (pos('Builder done: ', dump[i]) = 1)
- or
- (pos('Final result ', dump[i]) = 1)
- then tmpsl.Insert(0, dump[i]);
- end;
- a_summary.caption := 'Details';
- memo1.clear;
- memo1.lines.assign(tmpsl);
- tmpsl.free;
- dump.free;
- end
- else begin
- Memo1.lines.LoadFromFile(builderobject.ProjectDir+'\dump.dat');
- a_summary.caption := 'Summary';
- end;
- end;
-
- procedure TF_MainForm.A_retrieveLastDumpExecute(Sender: TObject);
- begin
- L_results.caption := 'Last dump retrieved.';
- Memo1.lines.loadFromFile(builderobject.ProjectDir+'\dump.dat');
- b_save.Action := A_Summary;
- end;
-
- procedure TF_MainForm.miContentsClick(Sender: TObject);
- begin
- application.HelpContext(10);
- end;
-
- procedure TF_MainForm.miAboutClick(Sender: TObject);
- begin
- f_about := tf_about.create(nil);
- f_about.showmodal;
- f_about.free;
-
- end;
-
- end.
-